/**
 * @file SocketIO.hh
 * @author zziywang (zziywang@163.com)
 * @brief { life is too short to learn cpp! }
 * @version 1.0
 * @date 2022-05-07
 *
 * @copyright Copyright (c) 2022
 *
 */

#pragma once

namespace snow
{
// 负责处理I/O，即发送和接收数据
class SocketIO
{
public:
    SocketIO(int socketFd);

    int readn(char *buf, int len);        // 读取len个字节
    int readInt32(int &);                 // 读取一个int32类型数据
    int readLine(char *buf, int maxLen);  // 读取一行数据，即读到一个'\n'就不再读取
    int writen(const char *buf, int len); // 写len个字节
    int writeInt32(int);

private:
    // 将数据从内核态中复制出来（不删除内核中复制的那部分）
    int recvPeek(char *buf, int len);

private:
    int socketFd_;
};

} // namespace snow